package com.jjc.android.activity

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.View
import com.google.zxing.Result
import com.jjc.android.BuildConfig
import com.jjc.android.Constants
import com.jjc.android.R
import com.jjc.android.util.UIStatusBarHelper
import com.jjc.android.util.messenger.ActivityMessenger
import com.king.zxing.CaptureActivity
import com.king.zxing.DecodeConfig
import com.king.zxing.DecodeFormatManager
import com.king.zxing.analyze.MultiFormatAnalyzer

class ScanActivity : CaptureActivity(){

    companion object{

        fun start(context: Activity,scanType: Int,action:((String)->Unit)? = null){
            val intent = Intent(context,ScanActivity::class.java)
            intent.putExtra(Constants.BUNDLE_TYPE,scanType)
            if(action!=null){
                ActivityMessenger.startActivityForResult(context,intent){
                    (it?.getSerializableExtra(Constants.BUNDLE_INFO) as? String)?.let(action)
                }
            }else{
                context.startActivity(intent)
            }
        }
    }

    override fun getLayoutId(): Int {
        val scanType = intent.getIntExtra(Constants.BUNDLE_TYPE,Constants.ScanType.SCAN_DEVICE)
        return if(scanType==Constants.ScanType.SCAN_CARD) R.layout.activity_scan_card else R.layout.activity_scan
    }
    private var scanType = Constants.ScanType.SCAN_DEVICE
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        findViewById<View?>(R.id.toolbar)?.let {
            UIStatusBarHelper.setStatusBarHeightWithPadding(it)
        }
        UIStatusBarHelper.translucent(this)
        UIStatusBarHelper.setStatusBarDarkMode(this)
        findViewById<View?>(R.id.iv_bar_back)?.setOnClickListener {
            finish()
        }
        scanType = intent.getIntExtra(Constants.BUNDLE_TYPE,Constants.ScanType.SCAN_DEVICE)
        if(BuildConfig.DEBUG){
            viewfinderView.postDelayed({
                if(scanType == Constants.ScanType.SCAN_CARD){
                    onScanResult("50310523071101")
//                    onScanResult("50310523071102")
                }else{
                    onScanResult("10000038")
                }
            },1200)
        }
    }

    override fun initCameraScan() {
        super.initCameraScan()
        //初始化解码配置
        val decodeConfig = DecodeConfig()
        decodeConfig.setHints(DecodeFormatManager.ALL_HINTS) ////设置解码
            .setSupportVerticalCode(true) //设置是否支持扫垂直的条码 （增强识别率，相应的也会增加性能消耗）
            .setSupportLuminanceInvert(true) //设置是否支持识别反色码，黑白颜色反转（增强识别率，相应的也会增加性能消耗）
            .setAreaRectRatio(0.8f)
            .isFullAreaScan = false //设置是否全区域识别，默认false

        //获取CameraScan，里面有扫码相关的配置设置。CameraScan里面包含部分支持链式调用的方法，即调用返回是CameraScan本身的一些配置建议在startCamera之前调用。
        cameraScan.setPlayBeep(true) //设置是否播放音效，默认为false
            .setVibrate(true) //设置是否震动，默认为false
            .setNeedAutoZoom(true) //二维码太小时可自动缩放，默认为false
            .setNeedTouchZoom(true) //支持多指触摸捏合缩放，默认为true
            .setDarkLightLux(45f) //设置光线足够暗的阈值（单位：lux），需要通过{@link #bindFlashlightView(View)}绑定手电筒才有效
            .setBrightLightLux(100f) //设置光线足够明亮的阈值（单位：lux），需要通过{@link #bindFlashlightView(View)}绑定手电筒才有效
            .setOnScanResultCallback(this) //设置扫码结果回调，需要自己处理或者需要连扫时，可设置回调，自己去处理相关逻辑
            .setAnalyzer(MultiFormatAnalyzer(decodeConfig)) //设置分析器,DecodeConfig可以配置一些解码时的配置信息，如果内置的不满足您的需求，你也可以自定义实现，
            .setAnalyzeImage(true) //设置是否分析图片，默认为true。如果设置为false，相当于关闭了扫码识别功能
    }

    private fun onScanResult(txt:String?){
        if(!txt.isNullOrEmpty()){
            val intent = Intent()
            intent.putExtra(Constants.BUNDLE_INFO,txt)
            setResult(Activity.RESULT_OK,intent)
            finish()
        }
    }

    override fun onScanResultCallback(result: Result?): Boolean {
        onScanResult(result?.text)
        return super.onScanResultCallback(result)
    }

    override fun onScanResultFailure() {

    }



}